<?php
/**
 * Page connexion du module administration
 * Permet de changer son profil et se déconnecter
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class connexionAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Accès réservé');
    }
    

    /**
     * Fonction par défaut, redirection vers l'accueil de l'administration
     */
    public function execute() {
	shAction::redirect('administration');
    }

    /**
     * Gère la déconnexion du panel administratif
     */
    public function executeOut() {
	// Destruction de session et de cookies
	shSession::__instance()->unsaveSessionAndCookie();

	// Redirection vers l'accueil
	shAction::redirect('/');
    }

    /**
     * Gère les modifications de profil
     */
    public function executeProfil() {
	$this->setTitle('Gestion de profil');
	$this->addAriane(shRequest::link('administration'), 'Administration');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier mon profil');
	$formulaire->addAttribute("autocomplete", "off");

	shField::text('Identifiant')
	    ->setValue(shSession::__instance()->getIdentifiant())
	    ->appendTo($formulaire);

	shField::email('Adresse e-mail')
	    ->setValue(shSession::__instance()->getEmail())
	    ->appendTo($formulaire);

	shField::password('Mot de passe')
	    ->setRequired(false)
	    ->setHelper('Seulement pour le changer')
	    ->appendTo($formulaire);

	shField::password('Confirmation du mot de passe')
	    ->setRequired(false)
	    ->setHelper('Seulement pour le changer')
	    ->appendTo($formulaire);

	
	$formulaire->setCheck(function($formulaire) {
	    if ( !$formulaire->getField('Identifiant')->isError() ) {
		if ( shSGBD::count('SELECT COUNT(id) '.
				   'FROM user '.
				   'WHERE identifiant=:identifiant '.
				   'AND id!=:id ',
				    array(':identifiant' => $formulaire->getField('Identifiant')->getValue(),
					     ':id' => shSession::__instance()->getId() ))
			> 0 )
		{
		    $formulaire->getField('Identifiant')->setError('L\'identifiant existe déjà');
		}
		
		if ( shSGBD::count('SELECT COUNT(id) '.
				   'FROM user '.
				   'WHERE email=:email '.
				   'AND id!=:id ',
				    array(':email'=>$formulaire->getField('Adresse e-mail')->getValue(),
					     ':id' => shSession::__instance()->getId() ))
			> 0 )
		{
		    $formulaire->getField('Adresse e-mail')->setError('L\'adresse e-mail existe déjà');
		}


	    }

	    if ( ($formulaire->getField('Mot de passe')->getValue() != '') OR ($formulaire->getField('Confirmation du mot de passe')->getValue() != '') ) {
		if ( $formulaire->getField('Mot de passe')->getValue() != $formulaire->getField('Confirmation du mot de passe')->getValue() ) {
		    $formulaire->getField('Mot de passe')->setError('Le mot de passe et sa confirmation doivent être identiques');
		    $formulaire->getField('Confirmation du mot de passe')->setError('&nbsp;');
		}
	    }
	});

	$formulaire->setSubmit(function($formulaire) {
	    // Mise à jour de l'utilisateur
	    shSGBD::update(
		'UPDATE user SET identifiant=:identifiant, email=:email '.
		'WHERE id=:id ',
		array(':identifiant' => $formulaire->getField('Identifiant')->getValue(),
		      ':email' => $formulaire->getField('Adresse e-mail')->getValue(),
		      ':id' => shSession::__instance()->getId()
		     )
	    );

	    shSession::__instance()
		->setIdentifiant($formulaire->getField('Identifiant')->getValue())
		->setEmail($formulaire->getField('Adresse e-mail')->getValue());

	    // Mot de passe modifié
	    if ( $formulaire->getField('Mot de passe')->getValue() != '' ) {
		shSGBD::update(
		    'UPDATE user SET motdepasse=:motdepasse '.
		    'WHERE id=:id ',
		    array(':motdepasse' => sha1($formulaire->getField('Mot de passe')->getValue()),
			  ':id' => shSession::__instance()->getId()
			 )
		);

		shSession::__instance()
		    ->setMotdepasse(sha1($formulaire->getField('Mot de passe')->getValue()));
	    }
	    shSession::__instance()->saveSession();
	    $formulaire->setConfirmation('Votre profil a été modifié avec succès.');
	});

	$this->assign('formulaire', $formulaire);
    }
}
?>